Appearance
先上效果
AI 对话 - 完成邮件编辑和发送 (我这里使用的 ChatWise 工具)
邮箱 - 收到的邮件
什么是 MCP
- 🤯 AI 一句话总结: MCP(Model Context Protocol)是一种协议,用于系统与本地运行的MCP服务器之间的通信,以扩展系统的工具和资源能力。
- 🔍 在前面一篇文章中有详细说明
什么是 MCP
- 🤖 Claude 博客: Introducing the Model Context Protocol
如何快速体验 MCP
- 工具:
chatwise
、Cline
、Cursor
、Cherry Studio
、Claude
等 - MCP 服务:
- [https://cline.bot/mcp-marketplace](https://cline.bot/mcp-marketplace)
使用上面的工具 和 MCP 服务提供商就可以愉愉快 🤩 “食”用了
但需要注意一点: 第三方平台的 MCP 服务可能存在一些安全隐私风险,尤其 sse 传输协议的,需要仔细甄别!
如何自己搭建 MCP 服务
了解 MCP 协议
技术栈
- Node.js + TypeScript
- Express.js
- Nodemailer
- MCP SDK (@modelcontextprotocol/sdk)
- SSE (Server-Sent Events)
核心实现
1. 服务器实例创建
typescript
const email_server = new McpServer({
name: 'email',
version: '1.0.0',
capabilities: {
resources: {},
tools: {},
},
})
2. 邮件发送功能封装
typescript
interface EmailOptions {
to: string
subject: string
text: string
}
async function sendEmail(options: EmailOptions): Promise<boolean> {
// 邮件发送逻辑实现
}
3. MCP 工具注册
typescript
email_server.tool('send-email', '发送邮件', async (params: EmailOptions) => {
// 工具实现逻辑
})
4. 服务集成
typescript
app.get('/email/sse', async (req, res) => {
const transport = new SSEServerTransport('/email/messages', res)
await email_server.connect(transport)
})
架构特点
- 解耦设计
- 邮件服务作为独立的 MCP 服务运行
- 通过标准接口与其他服务交互
- 便于维护和扩展
- 实时通信
- 使用 SSE 实现服务器推送
- 保持连接状态的实时更新
- 类型安全
- 使用 TypeScript 确保类型安全
- 接口定义清晰,减少运行时错误
- 错误处理
- 完整的错误捕获和处理机制
- 友好的错误反馈
最佳实践
- 配置管理
- 使用环境变量存储敏感信息
- 配置信息集中管理
- 安全性考虑
- SMTP 服务器安全配置
- 输入验证和清理
- 可扩展性
- 支持添加新的邮件功能
- 便于集成其他服务
使用示例
typescript
// 发送邮件示例
const response = await emailServer.executeTool('send-email', {
to: '[email protected]',
subject: 'Test Email',
text: 'Hello from MCP Email Service'
});
总结
通过 MCP 构建邮件服务不仅简化了开发流程,还提供了良好的可扩展性和维护性。这种方式特别适合需要集成多个微服务的现代应用程序。
未来展望
- 添加邮件模板支持
- 实现附件处理
- 集成更多邮件服务提供商
- 添加邮件队列功能
这个实现展示了如何使用现代技术栈构建一个实用的邮件服务,同时遵循了良好的软件工程实践。通过 MCP 的标准化接口,我们可以轻松地将这个服务集成到更大的系统中。